iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Mobile Development

android studio 30天 精華筆記系列 第 11

精華筆記 Day11 -- Vibrator、MediaPlayer

  • 分享至 

  • xImage
  •  

今天來講手機通知使用者比較常見的兩種方法,如我們常用的Line或其他應用,都會又有振動或鈴聲通知來告知有新訊息,今天就來時做一個能產生震動和播放鈴聲的app,讓往後各位設計app通知消息能夠更立體喔!

Vibrator

其功能包括管理手機震動。

  1. 設定權限(給予震動權限)
<uses-permission android:name="android.permission.VIBRATE" />
  1. 建立實例及產生震動
//獲取Vibrator實例
Vibrator vibrator = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);
//一關一開,repeat:-1代表不repeat,0或其他代表repeat。
vibrator.vibrate(new long[]{100, 500, 100, 500},0 );
//產生一次為期2秒的震動
//vibrator.vibrate(2000);

//VibrationEffect
//vibrator.vibrate(VibrationEffect.createWaveform(new long[]{500, 1000},new int[]{20,255},1));

產生震動的方法很簡單,透過呼叫方法vibrate()並給予震動秒數,單位為毫秒,即可產生出一個震動。
也可以透過VibrationEffect設定更細微的震動,可設定屬定包括持續時間timings、震幅amplitudes等,更多的可以看看官方文件,傳入的參數可以包括陣列,讓震動的持續時間和震幅產生變化喔。
3. 關閉震動(若設定循環)

vibrator.cancel();

震動可以設計程循環或是一次性,當循環時,停止就需依賴cancel(),不然會一直震動下去喔!!

MediaPlayer

  1. 設定權限
<!--  銀幕鎖也可以播聲音  -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 網路,如果要播放望路上的資源 -->
<uses-permission android:name="android.permission.INTERNET"/>
  1. 取得內鍵鈴聲Uri
//預設提示聲
Uri notification_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
//預設鈴聲
Uri ringtone_uri = RingtoneManager.getActualDefaultRingtoneUri(this,RingtoneManager.TYPE_RINGTONE);

這例提供兩個基本的音效,包括鈴聲和短的提示聲。

  1. 建立實例
mediaPlayer = MediaPlayer.create(this, ringtone_uri);
if (mediaPlayer == null) {
    //有的手機鈴聲會建立失敗
    Log.e("TAG", "startAlarm: mediaPlayer 建立失敗 " );
} else {
    mediaPlayer.setLooping(true);// 設定鈴聲迴圈播放
    try {
            //create()其實有做,可以不做
            mediaPlayer.prepare();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //開始播放
        mediaPlayer.start();
    }

把上一步獲得的Uri透過create()傳入並建立MediaPlayer,最後透過start()即可撥放鈴聲。
4. 停止播放

if (mediaPlayer != null) {
    if (mediaPlayer.isPlaying()) {
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

於震動概念相同,當設定程迴圈播放時,需要適時停止和釋放。

總結

其實今天的功能我個人認為實作起來最基本的功能是挺容易的,都已經有寫好的Function可以取得需要的東西,我覺得如果沒有特別要求,這已經是很足夠的了,不過還是要多加控管使用和結束時機喔,否則會有很奇怪的使用體驗。最後其實MediaPlayer還有很多的擴展空間,如過有客製或更進階的需求可以在多加研究~


上一篇
精華筆記 Day10--WebView
下一篇
精華筆記 Day 12 - 手機音量(AUDIO)
系列文
android studio 30天 精華筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言